home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / asm / pc370_3.exe / lha / SSP.ALC < prev    next >
Text File  |  1987-08-20  |  4KB  |  197 lines

  1.     TITLE 'SSP - PC/370 SCIENTIFIC SUBROUTINE PACKAGE'
  2. *
  3. *  PGMID.  SSP.ALC
  4. *  AUTHOR. DON HIGGINS.
  5. *  DATE.   07/22/87
  6. *  REMARKS.
  7. *
  8. *          THIS MODULE CONTAINS SCIENTIFIC SUBROUTINES SIMILIAR
  9. *          TO FORTRAN LIBRARY FUNCTIONS.  THESE ROUTINES REQUIRE
  10. *          PC/370 FLOATING POINT SUPPORT VIA 80X87 AND TAKE FULL
  11. *          ADVANTAGE OF 80X87 EXTENDED HARDWARE FUNCTIONS SUCH AS
  12. *          SQUARE ROOT, TANGENT, LOG, AND EXPONENT VIA SVC 35
  13. *          MICROCODE INSTRUCTION.  SEE SSP.DOC FOR MORE INFORMATION.
  14. *
  15. *          ARGUMENT IN F0 AND RESULT IN F0 UNLESS OTHERWISE NOTED.
  16. *          R15 SET TO 0 FOR NORMAL EXIT ELSE NOT ZERO FOR ERROR.
  17. *
  18. * MAINTENANCE:
  19. *
  20. * 08/08/87 ADD MOD, SIN, COS
  21. * 08/20/87 ADD PI
  22. *
  23. SSP      CSECT
  24. ALOG     EQU   *           F0=LOGE(F0)
  25.     ENTRY ALOG
  26.     USING *,R15
  27.     ST    R10,SAVE10
  28.     BALR  R10,0
  29.     USING *,R10
  30.     STD   F0,SAVEF0
  31.     STD   F2,SAVEF2
  32.     LA    R1,FPLE2    F0=LOGE(2)
  33.     SVC   FPSVC
  34.     LDR   F2,F0
  35.     LD    F0,SAVEF0
  36.     LA    R1,FPYL2X   F0=LOG2(F2*F0)
  37.     SVC   FPSVC
  38.     LD    F2,SAVEF2
  39.     L     R10,SAVE10
  40.     BR    R14
  41. ALOG10   EQU   *           F0=LOG10(F0)
  42.     ENTRY ALOG10
  43.     USING *,R15
  44.     ST    R10,SAVE10
  45.     BALR  R10,0
  46.     USING *,R10
  47.     STD   F0,SAVEF0
  48.     STD   F2,SAVEF2
  49.     LA    R1,FPLT2    F0=LOG10(2)
  50.     SVC   FPSVC
  51.     LDR   F2,F0
  52.     LD    F0,SAVEF0
  53.     LA    R1,FPYL2X   F0=LOG2(F2*F0)
  54.     SVC   FPSVC
  55.     LD    F2,SAVEF2
  56.     L     R10,SAVE10
  57.     BR    R14
  58. ATAN     EQU   *           F0=ARCTAN(F0)
  59.     ENTRY ATAN
  60.     USING *,R15
  61.     ST    R10,SAVE10
  62.     BALR  R10,0
  63.     USING *,R10
  64.     STD   F2,SAVEF2
  65.     LDR   F2,F0
  66.     LE    F0,=E'1'
  67.     LA    R1,FPATAN
  68.     SVC   FPSVC
  69.     LD    F2,SAVEF2
  70.     L     R10,SAVE10
  71.     BR    R14
  72. COS      EQU   *           F0=COS(F0)
  73.     ENTRY COS
  74.     USING *,R15
  75.     ST    R10,SAVE10
  76.     BALR  R10,0
  77.     USING *,R10
  78.     LA    R1,FPCOS
  79.     SVC   FPSVC
  80.     L     R10,SAVE10
  81.     BR    R14
  82. EXP      EQU   *           F0=E**(F0)
  83.     ENTRY EXP
  84.     USING *,R15
  85.     ST    R10,SAVE10
  86.     BALR  R10,0
  87.     USING *,R10
  88.     STD   F2,SAVEF2
  89.     LDR   F2,F0
  90.     LA    R1,FPL2E    F0=LOG2(E)
  91.     SVC   FPSVC
  92.     MER   F0,F2       F0=LOG2(E)*F0
  93.     LA    R1,FP2XM1   F0=2**(F0)
  94.     SVC   FPSVC
  95.     LD    F2,SAVEF2
  96.     L     R10,SAVE10
  97.     BR    R14
  98. INT      EQU   *          R0=F0
  99.     ENTRY INT
  100.     USING *,R15
  101.     ST    R10,SAVE10
  102.     BALR  R10,0
  103.     USING *,R10
  104.     LA    R1,FPIFIX
  105.     SVC   FPSVC
  106.     L     R10,SAVE10
  107.     BR    R14
  108. MOD      EQU   *           F0=MOD(F0,F2)
  109.     ENTRY MOD
  110.     USING *,R15
  111.     ST    R10,SAVE10
  112.     BALR  R10,0
  113.     USING *,R10
  114.     LA    R1,FPMOD
  115.     SVC   FPSVC
  116.     L     R10,SAVE10
  117.     BR    R14
  118. PI       EQU   *           F0=PI
  119.     ENTRY PI
  120.     USING *,R15
  121.     ST    R10,SAVE10
  122.     BALR  R10,0
  123.     USING *,R10
  124.     LA    R1,FPPI
  125.     SVC   FPSVC
  126.     L     R10,SAVE10
  127.     BR    R14
  128. REAL     EQU   *          F0=R0
  129.     ENTRY REAL
  130.     USING *,R15
  131.     ST    R10,SAVE10
  132.     BALR  R10,0
  133.     USING *,R10
  134.     LA    R1,FPFLOAT
  135.     SVC   FPSVC
  136.     L     R10,SAVE10
  137.     BR    R14
  138. SIN      EQU   *           F0=SIN(F0)
  139.     ENTRY SIN
  140.     USING *,R15
  141.     ST    R10,SAVE10
  142.     BALR  R10,0
  143.     USING *,R10
  144.     LA    R1,FPSIN
  145.     SVC   FPSVC
  146.     L     R10,SAVE10
  147.     BR    R14
  148. SQRT     EQU   *           F0=SQRT(F0)
  149.     ENTRY SQRT
  150.     USING *,R15
  151.     ST    R10,SAVE10
  152.     BALR  R10,0
  153.     USING *,R10
  154.     LA    R1,FPSQRT
  155.     SVC   FPSVC
  156.     L     R10,SAVE10
  157.     BR    R14
  158. TAN      EQU   *           F0=TAN(F0)
  159.     ENTRY TAN
  160.     USING *,R15
  161.     ST    R10,SAVE10
  162.     BALR  R10,0
  163.     USING *,R10
  164.     LA    R1,FPTAN
  165.     SVC   FPSVC
  166.     L     R10,SAVE10
  167.     BR    R14
  168. SAVE10   DS    F
  169. SAVEF0   DS    D
  170. SAVEF2   DS    D
  171. R0       EQU   0    INTEGER ARGUMENT/RESULT
  172. R1       EQU   1    SVC ARGUMENT
  173. R10      EQU   10   BASE
  174. R14      EQU   14   RETRUN ADDRESS
  175. R15      EQU   15   ENTRY ADDRESS
  176. F0       EQU   0    FLOATING POINT REGISTER 0
  177. F2       EQU   2    FLOATING POINT REGISTER 2
  178. FPSVC    EQU   35   PC/370 FP MICROCODE ROUTINES USING 80X87
  179. FPLT2    EQU   1    F0=LOG10(2)
  180. FPLE2    EQU   2    F0=LOGE(2)
  181. FPL2E    EQU   3    F0=LOG2(E)
  182. FPL2T    EQU   4    F0=LOG2(10)
  183. FPPI     EQU   5    F0=PI
  184. FPATAN   EQU   6    F0=ARCTAN(F2/F0)
  185. FPTANXY  EQU   7    F2/F0=TAN(F0)
  186. FPSQRT   EQU   8    F0=SQRT(F0)
  187. FPYL2X   EQU   9    F0=F2*LOG2(F0)
  188. FPYL2XM1 EQU   10   F0=F2*LOG2(F0-1)
  189. FP2XM1   EQU   11   F0=2**(F2*F0)-1
  190. FPFLOAT  EQU   12   F0=R0
  191. FPIFIX   EQU   13   R0=F0
  192. FPMOD    EQU   14   F0=MOD(F0,F2)
  193. FPSIN    EQU   15   F0=SIN(F0)
  194. FPCOS    EQU   16   F0=COS(F0)
  195. FPTAN    EQU   17   F0=TAN(F0)
  196.     END
  197.